其他
Spring Boot系列之项目国际化
PS:21号,中行原油宝碰到了历史上最低结算价,按照-37.63美元/桶结算,要投资者按照-266.12元/桶结算价平仓,事后发短信要求投资者即刻补足交割款,这意味着投资者,不但除了亏光保证金,剩下的要按-266块/桶倒贴,这里面有一个投资常识,不懂的一定不投,不要盲目去抄底。
区域解析器
创建国际化配置文件
创建配置类
测试效果
区域解析器
LocalResolver
接口,也可以实现实现该接口创建自己的区域解析器AcceptHeaderLocaleResolver
:默认区域解析器,通过 HTTP 请求的 accept-language 参数来解析区域;SessionLocaleResolver
:在当前会话有效,否则还原为默认状态;CookieLocaleResolver
:在当前 Cookie 有效期内有效,否则还原为默认状态;FixedLocaleResolver
:设置固定的Local
,不便于动态改变Local
;使用
LocaleChangeInterceptor
拦截器解析用户区域。
LocaleChangeInterceptor
拦截器和 SessionLocaleResolver
为例实现 Spring Boot 项目的国际化。创建国际化配置文件
Message
路径,如下:spring.messages.basename=i18n.home
创建配置类
LocaleChangeInterceptor
拦截器和 SessionLocaleResolver
,其设置的参数就是对应的 Local
,如下:* I18nConfig
*/
@Configuration
public class I18nConfig {
@Bean
public LocaleResolver localeResolver (){
return new SessionLocaleResolver();
}
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor changeInterceptor = new LocaleChangeInterceptor();
changeInterceptor.setParamName("lang");
registry.addInterceptor(changeInterceptor);
}
};
}
}
案例代码
I18nController
如下:public class I18nController {
@GetMapping(value = "/i18n")
public String il8n() {
return "i18n";
}
}
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Spring Boot I18n Sample.</title>
<script>
/**
* 页面加载完成后调用
*/
onload = function() {
let href = window.location.toString();
let suffix = href.substring(href.length - 2, href.length);
let lang = document.getElementsByClassName("lang");
console.log("--suffix--" + suffix);
switch (suffix) {
case "CN":
setStatus(lang[0], lang[1], lang[2]);
break;
case "TW":
setStatus(lang[1], lang[0], lang[2]);
break;
case "US":
setStatus(lang[2], lang[1], lang[0]);
break;
default:
setStatus(lang[0], lang[1], lang[2]);
}
};
/**
* 设置语言标签状态
* @param show 已选择的语言标签
* @param def1 未选择的语言标签
* @param def2 未选择的语言标签
*/
function setStatus(show, def1, def2) {
show.style.color = "rgb(0,0,255)";
def1.style.color = "rgb(0,0,0)";
def2.style.color = "rgb(0,0,0)";
}
</script>
</head>
<body>
<h3 th:text="#{home.title}">default</h3>
<p style="font-size: 12px">
<a class="lang" href="i18n?lang=zh_CN"> 简体中文 </a>|
<a class="lang" href="i18n?lang=zh_TW"> 繁体中文 </a>|
<a class="lang" href="i18n?lang=en_US"> English</a>
</p>
</body>
</html>